1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 import java.math.*;
32 import static java.math.BigDecimal.*;
33
34 public class MultiplyTests {
35
36 private static int multiplyTests() {
37 int failures = 0;
38
39 BigDecimal[] bd1 = {
40 new BigDecimal("123456789"),
41 new BigDecimal("1234567898"),
42 new BigDecimal("12345678987")
43 };
44
45 BigDecimal[] bd2 = {
46 new BigDecimal("987654321"),
47 new BigDecimal("8987654321"),
48 new BigDecimal("78987654321")
49 };
50
51
52
53 BigDecimal[][] expectedResults = {
54 {new BigDecimal("121932631112635269"),
55 new BigDecimal("1109586943112635269"),
56 new BigDecimal("9751562173112635269")
57 },
58 { new BigDecimal("1219326319027587258"),
59 new BigDecimal("11095869503027587258"),
60 new BigDecimal("97515622363027587258")
61 },
62 { new BigDecimal("12193263197189452827"),
63 new BigDecimal("110958695093189452827"),
64 new BigDecimal("975156224183189452827")
65 }
66 };
67
68 for (int i = 0; i < bd1.length; i++) {
69 for (int j = 0; j < bd2.length; j++) {
70 if (!bd1[i].multiply(bd2[j]).equals(expectedResults[i][j])) {
71 failures++;
72 }
73 }
74 }
75
76 BigDecimal x = BigDecimal.valueOf(8L, 1);
77 BigDecimal xPower = BigDecimal.valueOf(-1L);
78 try {
79 for (int i = 0; i < 100; i++) {
80 xPower = xPower.multiply(x);
81 }
82 } catch (Exception ex) {
83 failures++;
84 }
85 return failures;
86 }
87
88 public static void main(String[] args) {
89 int failures = 0;
90
91 failures += multiplyTests();
92
93 if (failures > 0) {
94 throw new RuntimeException("Incurred " + failures +
95 " failures while testing multiply.");
96 }
97 }
98 }